CoordinatorLayout是Android Design Support Library中比较难的控件,它是用来组织它的子View之间协助的一个父View,它直接继承于ViewGroup。
CoordinatorLayout默认情况下可理解是一个FrameLayout,它的布局方式是一层一层叠加上去的,这里我们来介绍它常用的两种情况。
CoordinatorLayout实现ToolBar的隐藏效果
首先看看效果:
接下来开始实现,首先配置build.gradle
build.gradle
|
|
com.android.support:design:23.2.0就是我们需要引入的兼容库
主界面
主界面跟前面的Android Design Support Library之NavigationView一致,不同之处在于layout=”@layout/app_bar_main”引入的布局实现的不同
|
|
下面我们来看看app_bar_main.xml这个布局:
|
|
CoordinatorLayout中不应该再设置android:fitsSystemWindows=”true”这个配置,因为外层已经设置好,如果设置会出现不和谐的效果。
Toolbar能隐藏的关键在于app:layout_scrollFlags=”scroll|enterAlways”这个事件,设置滚动事件,属性里面至少启用scroll这个flag,这样view才会滚动出屏幕,否则它将一直固定在头部。
Java代码实现
|
|
其他代码如ViewPager、RecyclerView的实现请参考Android Design Support Library之TabLayout一文。
效果
CoordinatorLayout+CollapsingToolbarLayout实现Toolbar折叠效果
首先看看效果:
要实现折叠效果我们需要引入一个新的布局CollapsingToolbarLayout,它作用是提供了一个可以折叠的Toolbar,它继承至FrameLayout,给它设置layout_scrollFlags,它可以控制包含在CollapsingToolbarLayout中的控件比如mageView、Toolbar在响应layout_behavior事件时作出相应的scrollFlags滚动事件。
布局
布局文件用CollapsingToolbarLayout将ImageView和Toolbar包含起来作为一个可折叠的Toolbar,再用AppBarLayout包裹起来作为一个Appbar的整体,当然,AppBarLayout目前必须是第一个嵌套在CoordinatorLayout里面的子view。
|
|
CollapsingToolbarLayout的几个关键属性需要说明一下:
app:contentScrim=”?attr/colorPrimary”,用来设置CollapsingToolbarLayout收缩后最顶部的颜色
app:expandedTitleGravity= “left|bottom”,表示将此CollapsingToolbarLayout完全展开后,title所处的位置,默认是left|bottom
app:collapsedTitleGravity= “left”,表示当头部的图片ImageView消失后,此title将回归到ToolBar的位置,默认是left
app:layout_scrollFlags=”scroll|exitUntilCollapsed”,这个属性我们上面讲过用来设置滚动事件,属性里面必须至少启用scroll这个flag,这样这个view才会滚动出屏幕,否则它将一直固定在顶部。这里我们设置的是app:layout_scrollFlags=”scroll|exitUntilCollapsed”这样能实现折叠效果,如果想要隐藏效果我们可以设置app:layout_scrollFlags=”scroll|enterAlways”
我们需要定义AppBarLayout与滚动视图之间的联系,Design Support Library包含了一个特殊的字符串资源@string/appbar_scrolling_view_behavior,它和AppBarLayout.ScrollingViewBehavior相匹配,用来通知AppBarLayout何时发生了滚动事件,这个behavior需要设置在触发事件的view之上,所以我们应该在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView上添加app:layout_behavior=”@string/appbar_scrolling_view_behavior这个属性,当然AppBarLayout 中的子view需要设置app:layout_scrollFlags这个属性,否则接收到RecyclerView滚动事件,AppBarLayout 也不会有什么变化。
Java代码实现
|
|
效果
参考文章
Android Design Support Library(三)用CoordinatorLayout实现Toolbar隐藏和折叠